package modes

import (
	"fmt"
	"time"
)

/*
 * 描述:推广机会属性表
 * 	 s_type  0 搜索推广 1 乐语推广 2 微信推广 3 自然流量
 * 	 education 0 未提交学历， 1 大专 2 中专 3 本科 4 其他
 *
 ********************************************************************/
type ChaNat struct {
	Id    int64 `json:"net_id" xorm:"id"`       //机会id
	Phone int64 `json:"net_phone" xorm:"phone"` //手机号
	//SType		int64		`json:"net_s_type" xorm:"s_type"`		//来源类型	0 搜索推广 1 乐语推广 2 微信推广 3 自然流量
	//SId			int64		`json:"net_source_id" xorm:"source_id"`	//来源ID
	Url_code  string `josn:"net_url_code" xorm:"url_code"`   //url
	ProWay    int64  `json:"net_pro_way" xorm:"pro_way"`     // 推广方式
	Courses   int    `json:"net_courses" xorm:"courses"`     //感兴趣的课程
	ChannelId int64  `json:"net_channelid" xorm:"channelid"` // 渠道id
	ProThe    int    `json:"net_pro_the" xorm:"pro_the"`     // 推 广 端
	Education int64  `json:"net_education" xorm:"education"` //学历	-- 0 无学历, 1 中专 2 大专， 3 本科 4 研究生
	Major     string `json:"net_major" xorm:"major"`         //专业
	City      int64  `json:"net_city" xorm:"city"`           //城市ADCODE
	UId       int64  `json:"net_uid" xorm:"uid"`             //首次指派坐席
	Uname     string `json:"net_uname" xorm:"uname"`         //坐席姓名
	At        int64  `json:"net_at" xorm:"at"`               //创建时间
	Pro_id    int64  `json:"net_pro_id" xorm:"pro_id"`       //项目id
	Pro_name  string `json:"net_pro_name" xorm:"pro_name"`   //项目名称
	Start     int    `json:"net_start" xorm:"start"`         //状态( 0 未分配 1 已分配 2 已成交)
}

func (this *ChaNat) TableName() string {
	return "cha_nat"
}

func (this *ChaNat) Save() (int64, error) {
	this.At = time.Now().Unix()
	return Db(0).Insert(this)
}

func (this *ChaNat) Get() (bool, error) {
	return Db(0).Get(this)
}

func (this *ChaNat) update(where string, field string) (int64, error) {
	return Db(0).Where(where).Cols(field).Update(this)
}

func (this *ChaNat) IdSet(field string) (int64, error) {
	where := fmt.Sprintf("id = %d", this.Id)
	return this.update(where, field)
}

func (this *ChaNat) list_count(where string) (int64, error) {
	return Db(0).Where(where).Count(this)
}

func (this *ChaNat) where(fage, count, page int, where, field string) ([]ChaNat, error) {
	list := make([]ChaNat, 0)
	var err error
	if field == "" {
		field = "id"
	}
	if 0 == fage { // 从小到大排序
		err = Db(0).Where(where).
			Asc(field).
			Limit(count, page*count).
			Find(&list)
	} else { // 从大到小排序
		err = Db(0).Where(where).
			Desc(field).
			Limit(count, page*count).
			Find(&list)
	}
	return list, err
}
func (this *ChaNat) AccountList(count, page int) ([]ChaNat, int64, error) {
	list := make([]ChaNat, 0)
	var err error
	var ncoun int64
	swhere := fmt.Sprintf("start = %d", this.Start)
	ncoun, err = this.list_count(swhere)
	if err == nil || ncoun > 0 {
		list, err = this.where(1, count, page, swhere, "")
	}
	return list, ncoun, err
}
